import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取CSV文件
data = pd.read_csv('automobile_prices_economics_2019_2023.csv')
# 显示原始数据的前几行
print("原始数据的前几行：")
print(data.head())
# 删除空行或者包含空值的行
data = data.dropna()
# 将价格列中的逗号去掉并转换为浮点数
data['New Price ($)'] = data['New Price ($)'].str.replace(',', '').astype(float)
data['Used Price ($)'] = data['Used Price ($)'].str.replace(',', '').astype(float)

# 将利率和通胀率转换为浮点数
data['Inflation Rate (%)'] = data['Inflation Rate (%)'].str.strip('%').astype(float)
data['Interest Rate (%)'] = data['Interest Rate (%)'].str.strip('%').astype(float)

# 将销量转换为整数
data['Units Sold'] = data['Units Sold'].str.replace(',', '').astype(int)
# data['Units Sold'] = data['Units Sold'].astype(int)

# 将'Month/Year'列转换为datetime类型
data['Month/Year'] = pd.to_datetime(data['Month/Year'], format='%y-%b')
# 显示原始数据的前几行
print("\n清洗后原始数据的前几行：")
print(data.head())

# 数据归约步骤

# 1. 删除重复数据
data = data.drop_duplicates()

# 2. 去除异常值（例如，销量为负或为0的行）
data = data[data['Units Sold'] > 0]

# 3. 减少数据精度（例如，将价格保留到小数点后两位）
data['New Price ($)'] = data['New Price ($)'].round(2)
data['Used Price ($)'] = data['Used Price ($)'].round(2)
data['Inflation Rate (%)'] = data['Inflation Rate (%)'].round(2)
data['Interest Rate (%)'] = data['Interest Rate (%)'].round(2)

# 4. 删除缺失值
data = data.dropna()

# 5. 选择性删除某些列（例如，如果某些列的方差非常小，可以考虑删除）
# 这里假设我们保留所有列

# 显示归约后的数据的前几行
print("\n归约后的数据的前几行：")
print(data.head())

# 保存归约后的数据到新的CSV文件
data.to_csv('reduced_automobile_prices_economics_2019_2023.csv', index=False)

print("\n归约后的数据已保存到 'reduced_automobile_prices_economics_2019_2023.csv'")

# 可视化部分

# 设置绘图风格
sns.set(style="whitegrid")

# 1. 新车价格随时间变化
plt.figure(figsize=(12, 6))
sns.lineplot(x='Month/Year', y='New Price ($)', data=data)
plt.title('New Car Prices Over Time')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 2. 二手车价格随时间变化
plt.figure(figsize=(12, 6))
sns.lineplot(x='Month/Year', y='Used Price ($)', data=data)
plt.title('Used Car Prices Over Time')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 3. 通胀率随时间变化
plt.figure(figsize=(12, 6))
sns.lineplot(x='Month/Year', y='Inflation Rate (%)', data=data)
plt.title('Inflation Rate Over Time')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 4. 利率随时间变化
plt.figure(figsize=(12, 6))
sns.lineplot(x='Month/Year', y='Interest Rate (%)', data=data)
plt.title('Interest Rate Over Time')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 5. 销量随时间变化
plt.figure(figsize=(12, 6))
sns.lineplot(x='Month/Year', y='Units Sold', data=data)
plt.title('Car Sales Over Time')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()